<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
  <meta content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no" name="viewport"/>
  <meta content="zh-cn" http-equiv="content-language"/>
  <meta content="总复习 重新审视“最佳实践”" name="description"/>
  <link href="/static/favicon.png" rel="icon"/>
  <title>
   总复习 重新审视“最佳实践”
  </title>
  <link href="/static/index.css" rel="stylesheet"/>
  <link href="/static/highlight.min.css" rel="stylesheet"/>
  <script src="/static/highlight.min.js">
  </script>
  <meta content="Hexo 4.2.0" name="generator"/>
  <script async="" data-website-id="83e5d5db-9d06-40e3-b780-cbae722fdf8c" defer="" src="https://analyze.lianglianglee.com/umami.js">
  </script>
 </head>
 <body>
  <div class="book-container">
   <div class="book-sidebar">
    <div class="book-brand">
     <a href="/">
      <img src="/static/favicon.png"/>
      <span>
       技术文章摘抄
      </span>
     </a>
    </div>
    <div class="book-menu uncollapsible">
     <ul class="uncollapsible">
      <li>
       <a class="current-tab" href="/">
        首页
       </a>
      </li>
      <li>
       <a href="../">
        上一级
       </a>
      </li>
     </ul>
     <ul class="uncollapsible">
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/00%20%e5%bc%80%e7%af%87%e8%af%8d%20%e7%a8%8b%e5%ba%8f%e5%91%98%e8%a7%a3%e5%86%b3%e7%9a%84%e9%97%ae%e9%a2%98%ef%bc%8c%e5%a4%a7%e5%a4%9a%e4%b8%8d%e6%98%af%e7%a8%8b%e5%ba%8f%e9%97%ae%e9%a2%98.html" id="00 开篇词 程序员解决的问题，大多不是程序问题.md">
        00 开篇词 程序员解决的问题，大多不是程序问题.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/01%2010x%e7%a8%8b%e5%ba%8f%e5%91%98%e6%98%af%e5%a6%82%e4%bd%95%e6%80%9d%e8%80%83%e7%9a%84%ef%bc%9f.html" id="01 10x程序员是如何思考的？.md">
        01 10x程序员是如何思考的？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/02%20%e4%bb%a5%e7%bb%88%e4%b8%ba%e5%a7%8b%ef%bc%9a%e5%a6%82%e4%bd%95%e8%ae%a9%e4%bd%a0%e7%9a%84%e5%8a%aa%e5%8a%9b%e4%b8%8d%e7%99%bd%e8%b4%b9%ef%bc%9f.html" id="02 以终为始：如何让你的努力不白费？.md">
        02 以终为始：如何让你的努力不白费？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/03%20DoD%e7%9a%84%e4%bb%b7%e5%80%bc%ef%bc%9a%e4%bd%a0%e5%ae%8c%e6%88%90%e4%ba%86%e5%b7%a5%e4%bd%9c%ef%bc%8c%e4%b8%ba%e4%bb%80%e4%b9%88%e4%bb%96%e4%bb%ac%e8%bf%98%e4%b8%8d%e6%bb%a1%e6%84%8f%ef%bc%9f.html" id="03 DoD的价值：你完成了工作，为什么他们还不满意？.md">
        03 DoD的价值：你完成了工作，为什么他们还不满意？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/04%20%e6%8e%a5%e5%88%b0%e9%9c%80%e6%b1%82%e4%bb%bb%e5%8a%a1%ef%bc%8c%e4%bd%a0%e8%a6%81%e5%85%88%e5%81%9a%e5%93%aa%e4%bb%b6%e4%ba%8b%ef%bc%9f.html" id="04 接到需求任务，你要先做哪件事？.md">
        04 接到需求任务，你要先做哪件事？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/05%20%e6%8c%81%e7%bb%ad%e9%9b%86%e6%88%90%ef%bc%9a%e9%9b%86%e6%88%90%e6%9c%ac%e8%ba%ab%e5%b0%b1%e6%98%af%e5%86%99%e4%bb%a3%e7%a0%81%e7%9a%84%e4%b8%80%e4%b8%aa%e7%8e%af%e8%8a%82.html" id="05 持续集成：集成本身就是写代码的一个环节.md">
        05 持续集成：集成本身就是写代码的一个环节.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/06%20%e7%b2%be%e7%9b%8a%e5%88%9b%e4%b8%9a%ef%bc%9a%e4%ba%a7%e5%93%81%e7%bb%8f%e7%90%86%e4%b8%8d%e9%9d%a0%e8%b0%b1%ef%bc%8c%e4%bd%a0%e8%af%a5%e6%80%8e%e4%b9%88%e5%8a%9e%ef%bc%9f.html" id="06 精益创业：产品经理不靠谱，你该怎么办？.md">
        06 精益创业：产品经理不靠谱，你该怎么办？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/07%20%e8%a7%a3%e5%86%b3%e4%ba%86%e5%be%88%e5%a4%9a%e6%8a%80%e6%9c%af%e9%97%ae%e9%a2%98%ef%bc%8c%e4%b8%ba%e4%bb%80%e4%b9%88%e4%bd%a0%e4%be%9d%e7%84%b6%e5%9c%a8%e2%80%9c%e5%9d%91%e2%80%9d%e9%87%8c%ef%bc%9f.html" id="07 解决了很多技术问题，为什么你依然在“坑”里？.md">
        07 解决了很多技术问题，为什么你依然在“坑”里？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/08%20%e4%b8%ba%e4%bb%80%e4%b9%88%e8%af%b4%e5%81%9a%e4%ba%8b%e4%b9%8b%e5%89%8d%e8%a6%81%e5%85%88%e8%bf%9b%e8%a1%8c%e6%8e%a8%e6%bc%94%ef%bc%9f.html" id="08 为什么说做事之前要先进行推演？.md">
        08 为什么说做事之前要先进行推演？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/09%20%e4%bd%a0%e7%9a%84%e5%b7%a5%e4%bd%9c%e5%8f%af%e4%bb%a5%e7%94%a8%e6%95%b0%e5%ad%97%e8%a1%a1%e9%87%8f%e5%90%97%ef%bc%9f.html" id="09 你的工作可以用数字衡量吗？.md">
        09 你的工作可以用数字衡量吗？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/10%20%e8%bf%ad%e4%bb%a30_%20%e5%90%af%e5%8a%a8%e5%bc%80%e5%8f%91%e4%b9%8b%e5%89%8d%ef%bc%8c%e4%bd%a0%e5%ba%94%e8%af%a5%e5%87%86%e5%a4%87%e4%bb%80%e4%b9%88%ef%bc%9f.html" id="10 迭代0_ 启动开发之前，你应该准备什么？.md">
        10 迭代0_ 启动开发之前，你应该准备什么？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/11%20%e5%90%91%e5%9f%83%e9%9a%86%c2%b7%e9%a9%ac%e6%96%af%e5%85%8b%e5%ad%a6%e4%b9%a0%e4%bb%bb%e5%8a%a1%e5%88%86%e8%a7%a3.html" id="11 向埃隆·马斯克学习任务分解.md">
        11 向埃隆·马斯克学习任务分解.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/12%20%e6%b5%8b%e8%af%95%e4%b9%9f%e6%98%af%e7%a8%8b%e5%ba%8f%e5%91%98%e7%9a%84%e4%ba%8b%e5%90%97%ef%bc%9f.html" id="12 测试也是程序员的事吗？.md">
        12 测试也是程序员的事吗？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/13%20%e5%85%88%e5%86%99%e6%b5%8b%e8%af%95%ef%bc%8c%e5%b0%b1%e6%98%af%e6%b5%8b%e8%af%95%e9%a9%b1%e5%8a%a8%e5%bc%80%e5%8f%91%e5%90%97%ef%bc%9f.html" id="13 先写测试，就是测试驱动开发吗？.md">
        13 先写测试，就是测试驱动开发吗？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/14%20%e5%a4%a7%e5%b8%88%e7%ba%a7%e7%a8%8b%e5%ba%8f%e5%91%98%e7%9a%84%e5%b7%a5%e4%bd%9c%e7%a7%98%e7%ac%88.html" id="14 大师级程序员的工作秘笈.md">
        14 大师级程序员的工作秘笈.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/15%20%e4%b8%80%e8%b5%b7%e7%bb%83%e4%b9%a0%ef%bc%9a%e6%89%8b%e6%8a%8a%e6%89%8b%e5%b8%a6%e4%bd%a0%e5%88%86%e8%a7%a3%e4%bb%bb%e5%8a%a1.html" id="15 一起练习：手把手带你分解任务.md">
        15 一起练习：手把手带你分解任务.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/16%20%e4%b8%ba%e4%bb%80%e4%b9%88%e4%bd%a0%e7%9a%84%e6%b5%8b%e8%af%95%e4%b8%8d%e5%a4%9f%e5%a5%bd%ef%bc%9f.html" id="16 为什么你的测试不够好？.md">
        16 为什么你的测试不够好？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/17%20%e7%a8%8b%e5%ba%8f%e5%91%98%e4%b9%9f%e5%8f%af%e4%bb%a5%e2%80%9c%e7%a0%8d%e2%80%9d%e9%9c%80%e6%b1%82%e5%90%97%ef%bc%9f.html" id="17 程序员也可以“砍”需求吗？.md">
        17 程序员也可以“砍”需求吗？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/18%20%e9%9c%80%e6%b1%82%e7%ae%a1%e7%90%86%ef%bc%9a%e5%a4%aa%e5%a4%9a%e4%ba%ba%e7%bb%99%e4%bd%a0%e5%ae%89%e6%8e%92%e4%bb%bb%e5%8a%a1%ef%bc%8c%e6%80%8e%e4%b9%88%e5%8a%9e%ef%bc%9f.html" id="18 需求管理：太多人给你安排任务，怎么办？.md">
        18 需求管理：太多人给你安排任务，怎么办？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/19%20%e5%a6%82%e4%bd%95%e7%94%a8%e6%9c%80%e5%b0%8f%e7%9a%84%e4%bb%a3%e4%bb%b7%e5%81%9a%e4%ba%a7%e5%93%81%ef%bc%9f.html" id="19 如何用最小的代价做产品？.md">
        19 如何用最小的代价做产品？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/20%20%e4%b8%ba%e4%bb%80%e4%b9%88%e4%b8%96%e7%95%8c%e5%92%8c%e4%bd%a0%e7%9a%84%e7%90%86%e8%a7%a3%e4%b8%8d%e4%b8%80%e6%a0%b7%ef%bc%9f.html" id="20 为什么世界和你的理解不一样？.md">
        20 为什么世界和你的理解不一样？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/21%20%e4%bd%a0%e7%9a%84%e4%bb%a3%e7%a0%81%e4%b8%ba%e8%b0%81%e8%80%8c%e5%86%99%ef%bc%9f.html" id="21 你的代码为谁而写？.md">
        21 你的代码为谁而写？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/22%20%e8%bd%bb%e9%87%8f%e7%ba%a7%e6%b2%9f%e9%80%9a%ef%bc%9a%e4%bd%a0%e6%80%bb%e6%98%af%e5%9c%a8%e5%bc%80%e4%bc%9a%e5%90%97%ef%bc%9f.html" id="22 轻量级沟通：你总是在开会吗？.md">
        22 轻量级沟通：你总是在开会吗？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/23%20%e5%8f%af%e8%a7%86%e5%8c%96%ef%bc%9a%e4%b8%80%e7%a7%8d%e6%9b%b4%e4%b8%ba%e7%9b%b4%e8%a7%82%e7%9a%84%e6%b2%9f%e9%80%9a%e6%96%b9%e5%bc%8f.html" id="23 可视化：一种更为直观的沟通方式.md">
        23 可视化：一种更为直观的沟通方式.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/24%20%e5%bf%ab%e9%80%9f%e5%8f%8d%e9%a6%88%ef%bc%9a%e4%b8%ba%e4%bb%80%e4%b9%88%e4%bd%a0%e4%bb%ac%e5%85%ac%e5%8f%b8%e6%80%bb%e6%98%af%e5%81%9a%e4%b8%8d%e5%a5%bd%e6%8c%81%e7%bb%ad%e9%9b%86%e6%88%90%ef%bc%9f.html" id="24 快速反馈：为什么你们公司总是做不好持续集成？.md">
        24 快速反馈：为什么你们公司总是做不好持续集成？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/25%20%e5%bc%80%e5%8f%91%e4%b8%ad%e7%9a%84%e9%97%ae%e9%a2%98%e4%b8%80%e5%86%8d%e5%87%ba%e7%8e%b0%ef%bc%8c%e5%ba%94%e8%af%a5%e6%80%8e%e4%b9%88%e5%8a%9e%ef%bc%9f.html" id="25 开发中的问题一再出现，应该怎么办？.md">
        25 开发中的问题一再出现，应该怎么办？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/26%20%e4%bd%9c%e4%b8%ba%e7%a8%8b%e5%ba%8f%e5%91%98%ef%bc%8c%e4%bd%a0%e4%b9%9f%e5%ba%94%e8%af%a5%e8%81%86%e5%90%ac%e7%94%a8%e6%88%b7%e5%a3%b0%e9%9f%b3.html" id="26 作为程序员，你也应该聆听用户声音.md">
        26 作为程序员，你也应该聆听用户声音.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/27%20%e5%b0%bd%e6%97%a9%e6%9a%b4%e9%9c%b2%e9%97%ae%e9%a2%98%ef%bc%9a%20%e4%b8%ba%e4%bb%80%e4%b9%88%e8%a2%ab%e6%8c%87%e8%b4%a3%e7%9a%84%e6%80%bb%e6%98%af%e4%bd%a0%ef%bc%9f.html" id="27 尽早暴露问题： 为什么被指责的总是你？.md">
        27 尽早暴露问题： 为什么被指责的总是你？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/28%20%e7%bb%93%e6%9e%84%e5%8c%96%ef%bc%9a%e5%86%99%e6%96%87%e6%a1%a3%e4%b9%9f%e6%98%af%e4%b8%80%e7%a7%8d%e5%ad%a6%e4%b9%a0%e6%96%b9%e5%bc%8f.html" id="28 结构化：写文档也是一种学习方式.md">
        28 结构化：写文档也是一种学习方式.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/29%20%e2%80%9c%e6%87%92%e6%83%b0%e2%80%9d%e5%ba%94%e8%af%a5%e6%98%af%e6%89%80%e6%9c%89%e7%a8%8b%e5%ba%8f%e5%91%98%e7%9a%84%e9%aa%84%e5%82%b2.html" id="29 “懒惰”应该是所有程序员的骄傲.md">
        29 “懒惰”应该是所有程序员的骄傲.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/30%20%e4%b8%80%e4%b8%aa%e5%a5%bd%e7%9a%84%e9%a1%b9%e7%9b%ae%e8%87%aa%e5%8a%a8%e5%8c%96%e5%ba%94%e8%af%a5%e6%98%af%e4%bb%80%e4%b9%88%e6%a0%b7%e5%ad%90%e7%9a%84%ef%bc%9f.html" id="30 一个好的项目自动化应该是什么样子的？.md">
        30 一个好的项目自动化应该是什么样子的？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/31%20%e7%a8%8b%e5%ba%8f%e5%91%98%e6%80%8e%e4%b9%88%e5%ad%a6%e4%b9%a0%e8%bf%90%e7%bb%b4%e7%9f%a5%e8%af%86%ef%bc%9f.html" id="31 程序员怎么学习运维知识？.md">
        31 程序员怎么学习运维知识？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/32%20%e6%8c%81%e7%bb%ad%e4%ba%a4%e4%bb%98%ef%bc%9a%e6%9c%89%e6%8c%81%e7%bb%ad%e9%9b%86%e6%88%90%e5%b0%b1%e5%a4%9f%e4%ba%86%e5%90%97%ef%bc%9f.html" id="32 持续交付：有持续集成就够了吗？.md">
        32 持续交付：有持续集成就够了吗？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/33%20%e5%a6%82%e4%bd%95%e5%81%9a%e5%a5%bd%e9%aa%8c%e6%94%b6%e6%b5%8b%e8%af%95%ef%bc%9f.html" id="33 如何做好验收测试？.md">
        33 如何做好验收测试？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/34%20%e4%bd%a0%e7%9a%84%e4%bb%a3%e7%a0%81%e6%98%af%e6%80%8e%e4%b9%88%e5%8f%98%e6%b7%b7%e4%b9%b1%e7%9a%84%ef%bc%9f.html" id="34 你的代码是怎么变混乱的？.md">
        34 你的代码是怎么变混乱的？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/35%20%e6%80%bb%e6%98%af%e5%9c%a8%e8%af%b4MVC%e5%88%86%e5%b1%82%e6%9e%b6%e6%9e%84%ef%bc%8c%e4%bd%86%e4%bd%a0%e7%9c%9f%e7%9a%84%e7%90%86%e8%a7%a3%e5%88%86%e5%b1%82%e5%90%97%ef%bc%9f.html" id="35 总是在说MVC分层架构，但你真的理解分层吗？.md">
        35 总是在说MVC分层架构，但你真的理解分层吗？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/36%20%e4%b8%ba%e4%bb%80%e4%b9%88%e6%80%bb%e6%9c%89%e4%ba%ba%e8%a7%89%e5%be%975%e4%b8%87%e5%9d%97%e9%92%b1%e5%8f%af%e4%bb%a5%e5%81%9a%e4%b8%80%e4%b8%aa%e6%b7%98%e5%ae%9d%ef%bc%9f.html" id="36 为什么总有人觉得5万块钱可以做一个淘宝？.md">
        36 为什么总有人觉得5万块钱可以做一个淘宝？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/37%20%e5%85%88%e5%81%9a%e5%a5%bdDDD%e5%86%8d%e8%b0%88%e5%be%ae%e6%9c%8d%e5%8a%a1%e5%90%a7%ef%bc%8c%e9%82%a3%e5%8f%aa%e6%98%af%e4%b8%80%e7%a7%8d%e9%83%a8%e7%bd%b2%e5%bd%a2%e5%bc%8f.html" id="37 先做好DDD再谈微服务吧，那只是一种部署形式.md">
        37 先做好DDD再谈微服务吧，那只是一种部署形式.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/38%20%e6%96%b0%e5%85%a5%e8%81%8c%e4%b8%80%e5%ae%b6%e5%85%ac%e5%8f%b8%ef%bc%8c%e6%80%8e%e4%b9%88%e5%bf%ab%e9%80%9f%e8%bf%9b%e5%85%a5%e5%b7%a5%e4%bd%9c%e7%8a%b6%e6%80%81%ef%bc%9f.html" id="38 新入职一家公司，怎么快速进入工作状态？.md">
        38 新入职一家公司，怎么快速进入工作状态？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/39%20%e9%9d%a2%e5%af%b9%e9%81%97%e7%95%99%e7%b3%bb%e7%bb%9f%ef%bc%8c%e4%bd%a0%e5%ba%94%e8%af%a5%e8%bf%99%e6%a0%b7%e5%81%9a.html" id="39 面对遗留系统，你应该这样做.md">
        39 面对遗留系统，你应该这样做.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/40%20%e6%88%91%e4%bb%ac%e5%ba%94%e8%af%a5%e5%a6%82%e4%bd%95%e4%bf%9d%e6%8c%81%e7%ab%9e%e4%ba%89%e5%8a%9b%ef%bc%9f.html" id="40 我们应该如何保持竞争力？.md">
        40 我们应该如何保持竞争力？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/%e5%88%92%e9%87%8d%e7%82%b9%20%e2%80%9c%e7%bb%bc%e5%90%88%e8%bf%90%e7%94%a8%e2%80%9d%e4%b8%bb%e9%a2%98%e5%86%85%e5%ae%b9%e7%9a%84%e5%85%a8%e7%9b%98%e5%9b%9e%e9%a1%be.html" id="划重点 “综合运用”主题内容的全盘回顾.md">
        划重点 “综合运用”主题内容的全盘回顾.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/%e5%88%92%e9%87%8d%e7%82%b9%20%e2%80%9c%e8%87%aa%e5%8a%a8%e5%8c%96%e2%80%9d%e4%b8%bb%e9%a2%98%e7%9a%84%e9%87%8d%e7%82%b9%e5%86%85%e5%ae%b9%e5%9b%9e%e9%a1%be%e6%b1%87%e6%80%bb.html" id="划重点 “自动化”主题的重点内容回顾汇总.md">
        划重点 “自动化”主题的重点内容回顾汇总.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/%e5%88%92%e9%87%8d%e7%82%b9%20%e4%b8%80%e6%ac%a1%e5%85%b3%e4%ba%8e%e2%80%9c%e6%b2%9f%e9%80%9a%e5%8f%8d%e9%a6%88%e2%80%9d%e4%b8%bb%e9%a2%98%e5%86%85%e5%ae%b9%e7%9a%84%e5%a4%8d%e7%9b%98.html" id="划重点 一次关于“沟通反馈”主题内容的复盘.md">
        划重点 一次关于“沟通反馈”主题内容的复盘.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/%e5%88%92%e9%87%8d%e7%82%b9%20%e5%85%b3%e4%ba%8e%e2%80%9c%e4%bb%a5%e7%bb%88%e4%b8%ba%e5%a7%8b%e2%80%9d%ef%bc%8c%e4%bd%a0%e8%a6%81%e8%ae%b0%e4%bd%8f%e7%9a%849%e5%8f%a5%e8%af%9d.html" id="划重点 关于“以终为始”，你要记住的9句话.md">
        划重点 关于“以终为始”，你要记住的9句话.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/%e5%88%92%e9%87%8d%e7%82%b9%20%e5%85%b3%e4%ba%8e%e2%80%9c%e4%bb%bb%e5%8a%a1%e5%88%86%e8%a7%a3%e2%80%9d%ef%bc%8c%e4%bd%a0%e8%a6%81%e9%87%8d%e7%82%b9%e6%8e%8c%e6%8f%a1%e5%93%aa%e4%ba%9b%e4%ba%8b%ef%bc%9f.html" id="划重点 关于“任务分解”，你要重点掌握哪些事？.md">
        划重点 关于“任务分解”，你要重点掌握哪些事？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/%e5%8a%a0%e9%a4%90%20%e4%bd%a0%e7%9c%9f%e7%9a%84%e4%ba%86%e8%a7%a3%e9%87%8d%e6%9e%84%e5%90%97%ef%bc%9f.html" id="加餐 你真的了解重构吗？.md">
        加餐 你真的了解重构吗？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/%e6%80%bb%e5%a4%8d%e4%b9%a0%20%e9%87%8d%e6%96%b0%e5%ae%a1%e8%a7%86%e2%80%9c%e6%9c%80%e4%bd%b3%e5%ae%9e%e8%b7%b5%e2%80%9d.html" id="总复习 重新审视“最佳实践”.md">
        总复习 重新审视“最佳实践”.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/%e6%80%bb%e5%a4%8d%e4%b9%a0%20%e9%87%8d%e6%96%b0%e6%9d%a5%e2%80%9c%e7%9c%8b%e4%b9%a6%e2%80%9d.html" id="总复习 重新来“看书”.md">
        总复习 重新来“看书”.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/%e7%ad%94%e7%96%91%e8%a7%a3%e6%83%91%20%e5%a6%82%e4%bd%95%e5%88%86%e8%a7%a3%e4%b8%80%e4%b8%aa%e4%bd%a0%e4%b8%8d%e4%ba%86%e8%a7%a3%e7%9a%84%e6%8a%80%e6%9c%af%e4%bb%bb%e5%8a%a1%ef%bc%9f.html" id="答疑解惑 如何分解一个你不了解的技术任务？.md">
        答疑解惑 如何分解一个你不了解的技术任务？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/%e7%ad%94%e7%96%91%e8%a7%a3%e6%83%91%20%e5%a6%82%e4%bd%95%e5%9c%a8%e5%ae%9e%e9%99%85%e5%b7%a5%e4%bd%9c%e4%b8%ad%e6%8e%a8%e8%a1%8c%e6%96%b0%e8%a7%82%e5%bf%b5%ef%bc%9f.html" id="答疑解惑 如何在实际工作中推行新观念？.md">
        答疑解惑 如何在实际工作中推行新观念？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/%e7%ad%94%e7%96%91%e8%a7%a3%e6%83%91%20%e5%a6%82%e4%bd%95%e7%ae%a1%e7%90%86%e4%bd%a0%e7%9a%84%e4%b8%8a%e7%ba%a7%ef%bc%9f.html" id="答疑解惑 如何管理你的上级？.md">
        答疑解惑 如何管理你的上级？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/%e7%ad%94%e7%96%91%e8%a7%a3%e6%83%91%20%e6%8c%81%e7%bb%ad%e9%9b%86%e6%88%90%e3%80%81%e6%8c%81%e7%bb%ad%e4%ba%a4%e4%bb%98%ef%bc%8c%e7%84%b6%e5%90%8e%e5%91%a2%ef%bc%9f.html" id="答疑解惑 持续集成、持续交付，然后呢？.md">
        答疑解惑 持续集成、持续交付，然后呢？.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/%e7%ad%94%e7%96%91%e8%a7%a3%e6%83%91%20%e6%8c%81%e7%bb%ad%e9%9b%86%e6%88%90%ef%bc%8c%e4%b8%80%e6%9d%a1%e8%b4%af%e7%a9%bf%e8%af%b8%e5%a4%9a%e5%ae%9e%e8%b7%b5%e7%9a%84%e4%b8%bb%e7%ba%bf.html" id="答疑解惑 持续集成，一条贯穿诸多实践的主线.md">
        答疑解惑 持续集成，一条贯穿诸多实践的主线.md
       </a>
      </li>
      <li>
       <a class="menu-item" href="/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/%e7%bb%93%e6%9d%9f%e8%af%ad%20%e5%b0%91%e5%81%9a%e4%ba%8b%ef%bc%8c%e6%89%8d%e8%83%bd%e6%9b%b4%e6%9c%89%e6%95%88%e5%9c%b0%e5%b7%a5%e4%bd%9c.html" id="结束语 少做事，才能更有效地工作.md">
        结束语 少做事，才能更有效地工作.md
       </a>
      </li>
      <li>
       <a href="/assets/捐赠.md">
        捐赠
       </a>
      </li>
     </ul>
    </div>
   </div>
   <div class="sidebar-toggle" onclick="sidebar_toggle()" onmouseleave="remove_inner()" onmouseover="add_inner()">
    <div class="sidebar-toggle-inner">
    </div>
   </div>
   <div class="off-canvas-content">
    <div class="columns">
     <div class="column col-12 col-lg-12">
      <div class="book-navbar">
       <header class="navbar">
        <section class="navbar-section">
         <a onclick="open_sidebar()">
          <i class="icon icon-menu">
          </i>
         </a>
        </section>
       </header>
      </div>
      <div class="book-content" style="max-width: 960px; margin: 0 auto;
    overflow-x: auto;
    overflow-y: hidden;">
       <div class="book-post">
        <p align="center" id="tip">
        </p>
        <p class="title">
         总复习 重新审视“最佳实践”
        </p>
        <div>
         <p>
          你好，我是郑晔。
         </p>
         <p>
          我承诺的正文内容已经全部交付给你，恭喜你完成了整个专栏的学习！希望通过对这些内容的学习，你已经对“如何做好软件”有了一个全新的认识。
         </p>
         <p>
          在这个专栏中，我给你讲了很多行业中的最佳实践，比如：测试、持续集成等等，但因为这个专栏叙述方式的关系，一些有关联的实践被放到了不同的模块下讲解。
         </p>
         <p>
          所以在这一讲中，我们将按照最佳实践的维度重新审视这些内容。我会将这些知识重新串联起来，帮你做一个对专栏的整体复习。
         </p>
         <h2 id="产品">
          产品
         </h2>
         <p>
          做产品，很多时候是面向不确定性解决问题。目前这方面最好的实践是“精益创业”。对于精益创业的最简单的理解就是“试”。试也有试的方法，精益创业提出了一个“开发（build）- 测量（measure）- 认知（learning）”这样的反馈循环，通过这个循环得到经过验证的认知（Validated Learning）。
         </p>
         <p>
          既然是对不确定产品特性的尝试，最好的办法就是低成本地试。在精益创业中，最小可行产品（MVP）就是低成本的试法。最小可行产品，就是“刚刚好”满足用户需求的产品。理解这个说法的关键在于用最小的代价，尝试可行的路径。
         </p>
         <p>
          在产品的打磨过程中，可以采用用户测试的方式，直接观察用户对产品的使用。作为程序员，我们要尽可能吃自家的狗粮，即便你做的产品不是给自己使用的产品，也可以努力走近用户。
         </p>
         <ul>
          <li>
           <p>
            <strong>
             精益创业
            </strong>
            -
相关阅读：《
            <a href="http://time.geekbang.org/column/article/76260" target="_blank">
             06 | 精益创业：产品经理不靠谱，你该怎么办？
            </a>
            》
           </p>
          </li>
          <li>
           <p>
            <strong>
             最小可行产品（MVP）
            </strong>
            -
相关阅读：《
            <a href="http://time.geekbang.org/column/article/80691" target="_blank">
             19 | 如何用最小的代价做产品？
            </a>
            》
           </p>
          </li>
          <li>
           <p>
            <strong>
             用户测试、验证产品特性、吃自家狗粮
            </strong>
            -
相关阅读：《
            <a href="http://time.geekbang.org/column/article/84185" target="_blank">
             26 | 作为程序员，你也应该聆听用户声音
            </a>
            》
           </p>
          </li>
         </ul>
         <h2 id="需求">
          需求
         </h2>
         <p>
          当我们确定做一个产品功能时，怎么描述需求也是很重要的。产品列表式的需求描述方式最容易出现问题的地方在于，看不清需求的全貌。
         </p>
         <p>
          用户故事是一个好的需求描述方式：作为一个什么角色，要做什么样的事，以便达成一种怎样的效果。
         </p>
         <p>
          在用户故事中，验收标准是非常重要的一环。即便不是采用用户故事描述需求，也依然建议先将验收标准定义清楚。
         </p>
         <p>
          开发团队对需求的理解普遍偏大，基本上都是一个主题。在开发之前，先将需求拆分成小粒度的。衡量一个用户故事拆分是否恰当，一个标准是 INVEST 原则。有了拆分出来的用户故事，就可以进行估算了，估算的过程也是对需求加深理解的过程，过大的用户故事应该再次拆分。
         </p>
         <p>
          当我们有了拆分之后的需求，就可以对需求进行优先级讨论了。先做重要性高的事，而不是一股脑地去做所有的需求。只有分清了需求的优先级，才能方便地对需求进行管理。
         </p>
         <ul>
          <li>
           <p>
            <strong>
             用户故事
            </strong>
            -
相关阅读：《
            <a href="http://time.geekbang.org/column/article/75100" target="_blank">
             04 | 接到需求任务，你要先做哪件事？
            </a>
            》
           </p>
          </li>
          <li>
           <p>
            <strong>
             需求的分解与估算
            </strong>
            -
相关阅读：《
            <a href="http://time.geekbang.org/column/article/79520" target="_blank">
             17 | 程序员也可以“砍”需求吗？
            </a>
            》
           </p>
          </li>
          <li>
           <p>
            <strong>
             需求管理、优先级
            </strong>
            -
相关阅读：《
            <a href="http://time.geekbang.org/column/article/80428" target="_blank">
             18 | 需求管理：太多人给你安排任务，怎么办？
            </a>
            》
           </p>
          </li>
         </ul>
         <h2 id="持续集成">
          持续集成
         </h2>
         <p>
          在开发中，写出代码并不是终点，我们要把代码集成起来。集成要经常做，改动量越小，集成就可以做得越频繁，频繁到每次提交都去集成，这就是持续集成。
         </p>
         <p>
          持续集成发展到今天已经是一套完整的开发实践。想要做好持续集成，你需要记住持续集成的关键是“快速反馈”。
         </p>
         <ul>
          <li>
           怎样快速得到反馈。
          </li>
          <li>
           怎样反馈是有效的。
          </li>
         </ul>
         <p>
          持续集成，可以继续延展，将生产部署也纳入其中，这就是持续交付。如果持续交付，再向前一步，就可以同产品验证结合起来。
         </p>
         <p>
          持续交付的关键点，是在不同的环境验证发布包和自动化部署。不同的环境组成了持续交付的构建流水线，而自动化部署主要是 DevOps 发挥能力的地方。持续交付的发展，让交付物从一个简单的发布包变成了一个拥有完整环境的 Docker 镜像。
         </p>
         <p>
          持续集成和持续交付可以将诸多的实践贯穿起来：单元测试、软件设计、任务分解、主分支开发、DevOps 等等。所以，如果一个公司希望做过程改进，持续集成是一个好的出发点。
         </p>
         <ul>
          <li>
           <p>
            <strong>
             持续集成发展史
            </strong>
            -
相关阅读：《
            <a href="http://time.geekbang.org/column/article/75977" target="_blank">
             05 | 持续集成：集成本身就应该是写代码的一个环节
            </a>
            》
           </p>
          </li>
          <li>
           <p>
            <strong>
             快速反馈
            </strong>
            -
相关阅读：《
            <a href="http://time.geekbang.org/column/article/83461" target="_blank">
             24 | 快速反馈：为什么你们公司总是做不好持续集成？
            </a>
            》
           </p>
          </li>
          <li>
           <p>
            <strong>
             持续集成，贯穿诸多实践
            </strong>
            -
相关阅读：《
            <a href="http://time.geekbang.org/column/article/85049" target="_blank">
             答疑解惑 | 持续集成，一条贯穿诸多实践的主线
            </a>
            》
           </p>
          </li>
          <li>
           <p>
            <strong>
             持续交付
            </strong>
            -
相关阅读：《
            <a href="http://time.geekbang.org/column/article/87229" target="_blank">
             32 | 持续交付：有持续集成就够了吗？
            </a>
            》
           </p>
          </li>
          <li>
           <p>
            <strong>
             与产品结合：持续验证
            </strong>
            -
相关阅读：《
            <a href="http://time.geekbang.org/column/article/89050" target="_blank">
             答疑解惑 | 持续集成、持续交付，然后呢？
            </a>
            》
           </p>
          </li>
         </ul>
         <h2 id="测试">
          测试
         </h2>
         <p>
          测试是一个典型的程序员误区，很多程序员误以为测试只是测试人员的事。理解了软件变更成本，知道了内建质量之后，我们就应该清楚，测试应该体现在全部的开发环节中。这一思想在开发中的体现就是自动化测试。
         </p>
         <p>
          想要写好自动化测试，需要先理解测试金字塔，不同的测试运行成本不同。为了让软件拥有更多的、覆盖面更广的测试，需要多写单元测试。
         </p>
         <p>
          编写测试的方式有很多，一种实践是测试驱动开发（TDD）。先写测试，然后写代码，最后重构，这就是 TDD 的节奏：红——绿——重构。测试驱动开发的本质是测试驱动设计，所以，编写可测试的代码是前提。
         </p>
         <p>
          要想做好 TDD，一个重要的前提是任务分解，分解到非常小的微操作。学会任务分解，是成为优秀程序员的前提条件。
         </p>
         <p>
          想写好测试，需要懂得好测试是什么样子的，避免测试的坏味道。好测试有一个衡量标准：A-TRIP。
         </p>
         <p>
          我们不只要写好单元测试，还要站在应用的角度写测试，这就是验收测试。验收测试现在比较成体系的做法是行为驱动开发（BDD），它让你可以用业务的语言描述测试。
         </p>
         <ul>
          <li>
           <p>
            <strong>
             单元测试、自动化测试、蛋卷和冰淇淋模型
            </strong>
            -
相关阅读：《
            <a href="http://time.geekbang.org/column/article/77917" target="_blank">
             12 | 测试也是程序员的事吗？
            </a>
            》
           </p>
          </li>
          <li>
           <p>
            <strong>
             测试驱动开发
            </strong>
            -
相关阅读：《
            <a href="http://time.geekbang.org/column/article/78104" target="_blank">
             13 | 先写测试，就是测试驱动开发吗？
            </a>
            》-
相关阅读：《
            <a href="http://time.geekbang.org/column/article/78507" target="_blank">
             14 | 大师级程序员的工作秘笈
            </a>
            》
           </p>
          </li>
          <li>
           <p>
            <strong>
             测试练习
            </strong>
            -
相关阅读：《
            <a href="http://time.geekbang.org/column/article/78542" target="_blank">
             15 | 一起练习：手把手带你拆任务
            </a>
            》
           </p>
          </li>
          <li>
           <p>
            <strong>
             简单的测试、测试的坏味道、A-TRIP
            </strong>
            -
相关阅读：《
            <a href="http://time.geekbang.org/column/article/79494" target="_blank">
             16 | 为什么你的测试不够好？
            </a>
            》
           </p>
          </li>
          <li>
           <p>
            <strong>
             验收测试、写好验收测试用例
            </strong>
            -
相关阅读：《
            <a href="http://time.geekbang.org/column/article/87229" target="_blank">
             32 | 持续交付：有持续集成就够了吗？
            </a>
            》
           </p>
          </li>
          <li>
           <p>
            <strong>
             外部系统测试，用接口隔离
            </strong>
            -
相关阅读：《
            <a href="http://time.geekbang.org/column/article/91127" target="_blank">
             答疑解惑 | 如何在实际工作中推行新观念？
            </a>
            》
           </p>
          </li>
         </ul>
         <h2 id="编码与设计">
          编码与设计
         </h2>
         <p>
          编码和设计，是软件开发中最重要的一环。在我看来，编码和设计是一体，想清楚才能写出好代码。很多程序员追求写好代码，却没有一个很好的标准去衡量代码的好坏。结合着软件设计的一些理念，我给你一个编写好代码的进步阶梯，希望你能达到用业务语言编写代码的程度。
         </p>
         <p>
          用业务语言编写代码，需要对软件设计有着良好的理解。提到设计，人们的初步印象是“高内聚低耦合”，但这是一个太过高度抽象的描述。SOLID 原则是一个更具实践性的指导原则，有了原则做指导，就可以更好地理解设计模式了。
         </p>
         <p>
          有了基础原则，我们会知道将不同的代码划分开，这样就产生了分层。好的分层可以构建出抽象，而其他人就可以在这个抽象上继续发展。对于程序员来说，构建自己的核心抽象是最关键的一步。
         </p>
         <p>
          目前构建核心抽象最好的方式是领域驱动设计（DDD），它将我们思考的起点拉到了业务层面，通过战略设计将系统按照不同的上下文划分开来，再通过战术设计，指导我们有效地设计一个个的领域模型。
         </p>
         <p>
          但无论怎样做设计，前提是使用适当的技术解决适当的问题，不要把技术用复杂，把团队带入泥潭。
         </p>
         <ul>
          <li>
           <p>
            <strong>
             业务语言写代码
            </strong>
            -
相关阅读：《
            <a href="http://time.geekbang.org/column/article/82581" target="_blank">
             21 | 你的代码为谁而写？
            </a>
            》
           </p>
          </li>
          <li>
           <p>
            <strong>
             架构设计
            </strong>
            -
相关阅读：《
            <a href="http://time.geekbang.org/column/article/87845" target="_blank">
             34 | 你的代码是怎么变混乱的？
            </a>
            》
           </p>
          </li>
          <li>
           <p>
            <strong>
             分层、抽象
            </strong>
            -
相关阅读：《
            <a href="http://time.geekbang.org/column/article/88309" target="_blank">
             35 | 总是在说MVC分层架构，但你真的理解分层吗？
            </a>
            》
           </p>
          </li>
          <li>
           <p>
            <strong>
             业务与技术
            </strong>
            -
相关阅读：《
            <a href="http://time.geekbang.org/column/article/88764" target="_blank">
             36 | 为什么总有人觉得5万块钱可以做一个淘宝？
            </a>
            》
           </p>
          </li>
          <li>
           <p>
            <strong>
             微服务
            </strong>
            -
相关阅读：《
            <a href="http://time.geekbang.org/column/article/89049" target="_blank">
             37 | 先做好DDD再谈微服务吧，那只是一种部署形式
            </a>
            》
           </p>
          </li>
         </ul>
         <h2 id="项目准备">
          项目准备
         </h2>
         <p>
          从头开始一个项目时，一个好的实践就是把一切都准备好。迭代0就是这样一个把迭代准备好的实践，从需求到技术，做好充分的准备工作再开启项目，你会显得从容不迫。在技术方面，迭代0最重要的准备工作就是构建脚本，它是后续很多工作的基础，比如，持续集成。
         </p>
         <ul>
          <li>
           <p>
            <strong>
             迭代0，做基础的准备
            </strong>
            -
相关阅读：《
            <a href="http://time.geekbang.org/column/article/77294" target="_blank">
             10 | 迭代0: 启动开发之前，你应该准备什么？
            </a>
            》
           </p>
          </li>
          <li>
           <p>
            <strong>
             构建脚本，让项目一开始就自动化
            </strong>
            -
相关阅读：《
            <a href="http://time.geekbang.org/column/article/86561" target="_blank">
             30 | 一个好的项目自动化应该是什么样子的？
            </a>
            》
           </p>
          </li>
         </ul>
         <h2 id="其余的最佳实践">
          其余的最佳实践
         </h2>
         <p>
          除了几个花大篇幅介绍的最佳实践，我们还提到了很多不同的最佳实践。
         </p>
         <h2 id="dod">
          DoD
         </h2>
         <p>
          完成的定义（DoD），是一个确保合作各方理解一致的实践。它是一个清单，由一个个检查项组成，每个检查项都是实际可检查的。有了 DoD，做事就只有两种状态：完成和未完成。
         </p>
         <ul>
          <li>
           <strong>
            完成的定义，DOD
           </strong>
           -
相关阅读：《
           <a href="http://time.geekbang.org/column/article/74828" target="_blank">
            03 | DoD价值：你完成了工作，为什么他们还不满意？
           </a>
           》
          </li>
         </ul>
         <h2 id="站会">
          站会
         </h2>
         <p>
          站会，一种轻量级的会议形式，用来同步每天发生的事情。一般来说，只说三件事：昨天做了什么，今天打算做什么，遇到了什么问题。
         </p>
         <ul>
          <li>
           <strong>
            站会
           </strong>
           -
相关阅读：《
           <a href="http://time.geekbang.org/column/article/82844" target="_blank">
            22 | 轻量级沟通：你总是在开会吗？
           </a>
           》
          </li>
         </ul>
         <h2 id="看板">
          看板
         </h2>
         <p>
          看板，一种项目管理工具， 将正在进行的工作可视化。通过看板，可以发现团队正在进行工作的很多问题。看板有实体和电子之分，可以根据自己的项目特点进行选择。
         </p>
         <ul>
          <li>
           <strong>
            看板
           </strong>
           -
相关阅读：《
           <a href="http://time.geekbang.org/column/article/83082" target="_blank">
            23 | 可视化：一种更为直观的沟通方式
           </a>
           》
          </li>
         </ul>
         <h2 id="回顾会议">
          回顾会议
         </h2>
         <p>
          回顾会议，是一种复盘实践，让团队成员对一个周期内发生的事情进行回顾。回顾会议一般分为讲事实、找重点和制定行动项三个部分。但在开始回顾之前，会先进行安全检查，确保每个人都能放心大胆地说真话。
         </p>
         <ul>
          <li>
           <p>
            <strong>
             回顾会议
            </strong>
            -
相关阅读：《
            <a href="http://time.geekbang.org/column/article/83841" target="_blank">
             25 | 开发中的问题一再出现，应该怎么办？
            </a>
            》
           </p>
          </li>
          <li>
           <p>
            <strong>
             回顾会议中的安全检查
            </strong>
            -
相关阅读：《
            <a href="http://time.geekbang.org/column/article/85049" target="_blank">
             答疑解惑 | 持续集成，一条贯穿诸多实践的主线
            </a>
            》
           </p>
          </li>
         </ul>
         <h2 id="重构">
          重构
         </h2>
         <p>
          重构，是程序员的基本功，把调整代码的动作分解成若干可以单独进行的“重构”小动作，一步步完成。重构的前提是识别代码的坏味道。保证代码行为不变，需要有测试配合，而重构的方向是，重构成模式（Refactoring to Patterns）。重构的过程和编写代码的过程最好结伴而行，最佳实践就是测试驱动开发。
         </p>
         <ul>
          <li>
           <p>
            <strong>
             重构
            </strong>
            -
相关阅读：《
            <a href="http://time.geekbang.org/column/article/85915" target="_blank">
             加餐 | 你真的了解重构吗？
            </a>
            》
           </p>
          </li>
          <li>
           <p>
            <strong>
             在测试驱动开发中重构
            </strong>
            -
相关阅读：《
            <a href="http://time.geekbang.org/column/article/78104" target="_blank">
             13 | 先写测试，就是测试驱动开发吗？
            </a>
            》
           </p>
          </li>
         </ul>
         <h2 id="分支开发">
          分支开发
         </h2>
         <p>
          分支开发模型，是每个团队都要面临的问题。行业中有两种常见的分支模型，一种是基于主干的开发模型，一种是分支开发模型。分支开发符合直觉，却不是最佳实践。主分支开发模型是与其他实践配合最好的模式，但也需要开发者有着良好的开发习惯。如果并行开发多个功能，可以考虑 Feature Toggle 和 Branch by Abstraction。
         </p>
         <ul>
          <li>
           <p>
            <strong>
             分支开发
            </strong>
            -
相关阅读：《
            <a href="http://time.geekbang.org/column/article/78507" target="_blank">
             14 | 大师级程序员的工作秘笈
            </a>
            》
           </p>
          </li>
          <li>
           <p>
            <strong>
             Feature Toggle 和 Branch by Abstraction
            </strong>
            -
相关阅读：《
            <a href="http://time.geekbang.org/column/article/81515" target="_blank">
             答疑解惑 | 如何分解一个你不了解的技术任务？
            </a>
            》
           </p>
          </li>
         </ul>
         <h2 id="fail-fast">
          Fail Fast
         </h2>
         <p>
          Fail Fast 是一个重要的编程原则：遇到问题，尽早报错。不要以构建健壮系统为由，兼容很多奇怪的问题，使得 Bug 得以藏身。
         </p>
         <ul>
          <li>
           <strong>
            Fail Fast
           </strong>
           -
相关阅读：《
           <a href="http://time.geekbang.org/column/article/84374" target="_blank">
            27 | 尽早暴露问题： 为什么被指责的总是你？
           </a>
           》
          </li>
         </ul>
         <p>
          感谢阅读，如果你觉得这篇文章对你有帮助的话，也欢迎把它分享给你的朋友。
         </p>
        </div>
       </div>
       <div>
        <div id="prePage" style="float: left">
        </div>
        <div id="nextPage" style="float: right">
        </div>
       </div>
      </div>
     </div>
    </div>
    <div class="copyright">
     <hr/>
     <p>
      © 2019 - 2023
      <a href="/cdn-cgi/l/email-protection#066a6a6a3f323737363146616b676f6a2865696b" target="_blank">
       Liangliang Lee
      </a>
      .
                    Powered by
      <a href="https://github.com/gin-gonic/gin" target="_blank">
       gin
      </a>
      and
      <a href="https://github.com/kaiiiz/hexo-theme-book" target="_blank">
       hexo-theme-book
      </a>
      .
     </p>
    </div>
   </div>
   <a class="off-canvas-overlay" onclick="hide_canvas()">
   </a>
  </div>
  <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js">
  </script>
  <script>
   (function(){var js = "window['__CF$cv$params']={r:'82250c3add550491',t:'MTY5OTM1NDU2Ni45NTEwMDA='};_cpo=document.createElement('script');_cpo.nonce='',_cpo.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js',document.getElementsByTagName('head')[0].appendChild(_cpo);";var _0xh = document.createElement('iframe');_0xh.height = 1;_0xh.width = 1;_0xh.style.position = 'absolute';_0xh.style.top = 0;_0xh.style.left = 0;_0xh.style.border = 'none';_0xh.style.visibility = 'hidden';document.body.appendChild(_0xh);function handler() {var _0xi = _0xh.contentDocument || _0xh.contentWindow.document;if (_0xi) {var _0xj = _0xi.createElement('script');_0xj.innerHTML = js;_0xi.getElementsByTagName('head')[0].appendChild(_0xj);}}if (document.readyState !== 'loading') {handler();} else if (window.addEventListener) {document.addEventListener('DOMContentLoaded', handler);} else {var prev = document.onreadystatechange || function () {};document.onreadystatechange = function (e) {prev(e);if (document.readyState !== 'loading') {document.onreadystatechange = prev;handler();}};}})();
  </script>
  <script crossorigin="anonymous" data-cf-beacon='{"rayId":"82250c3add550491","version":"2023.10.0","r":1,"token":"1f5d475227ce4f0089a7cff1ab17c0f5","b":1}' defer="" integrity="sha512-euoFGowhlaLqXsPWQ48qSkBSCFs3DPRyiwVu3FjR96cMPx+Fr+gpWRhIafcHwqwCqWS42RZhIudOvEI+Ckf6MA==" src="https://static.cloudflareinsights.com/beacon.min.js/v84a3a4012de94ce1a686ba8c167c359c1696973893317">
  </script>
 </body>
 <script async="" src="https://www.googletagmanager.com/gtag/js?id=G-NPSEEVD756">
 </script>
 <script src="/static/index.js">
 </script>
</html>
